// 静态方法：不用创建类就可以使用的方法。
class Cat {
  static isCat(a) {
    return a instanceof Cat
  }
}
let cat1 = new Cat()
Cat.isCat(cat1)



// 属性可以有3种访问的修饰符进行修饰，public/private/protected
// public,任何地方都可以访问，默认所有的属性都是public
// private,私有的，只能在类的内容访问，不能类外面访问
// protected,受保护的，protect在子类里可以访问，private是不允许的
class Dog {
  public name = 'tom';
  private age = 33;
  protected color = 'white';
  constructor() { }
}

// 继承
class Apple {
  protected name;
  constructor(name) {
    this.name = name
  }
}
class BigApple extends Apple {
  constructor(name) {
    super(name)
    console.log(``, this.name)
  }
}

new BigApple('hhh')


// 抽象类
// 抽象类不能被实例化，只能用于被继承实现
abstract class PinkPig {
  public name;
  constructor(name) { this.name = name }
  public abstract sayHi(); // 定义抽象方法，但不实现
}

class SmallPinkPig extends PinkPig {
  constructor(name) {
    super(name)
    console.log(``, this.name)
  }
  sayHi() {
    console.log(`在这里实现抽象方法`,)
  }
}